package net.suncaper.mvc.service;

import net.suncaper.mvc.model.domain.Room;

import java.math.BigDecimal;
import java.util.List;

/**
 * 房间业务接口
 */
public interface IRoomService {
    /**
     * 添加房间信息
     * @param room 房间实体对象（包含房型、酒店名称等所有字段）
     * @return 添加结果（true：成功；false：失败）
     */
    boolean addRoom(Room room);

    /**
     * 根据酒店名称查询所有房间
     * @param hotelName 酒店名称
     * @return 该酒店的房间列表（无数据则返回空列表）
     */
    List<Room> getRoomsByHotel(String hotelName);

    /**
     * 根据房型和酒店名称查询唯一房间
     * @param roomType 房型
     * @param hotelName 酒店名称
     * @return 匹配的房间信息（无数据则返回null）
     */
    Room getRoomByTypeAndHotel(String roomType, String hotelName);

    /**
     * 查询所有房间信息
     * @return 所有房间列表（无数据则返回空列表）
     */
    List<Room> getAllRooms();

    /**
     * 更新房间信息（价格、库存等）
     * @param room 包含更新信息的房间对象（需包含房型和酒店名称用于定位）
     * @return 更新结果（true：成功；false：失败或房间不存在）
     */
    boolean updateRoom(Room room);

    /**
     * 删除房间信息
     * @param roomType 房型
     * @param hotelName 酒店名称
     * @return 删除结果（true：成功；false：失败或房间不存在）
     */
    boolean deleteRoom(String roomType, String hotelName);

    /**
     * 调整房间价格
     * @param roomType 房型
     * @param hotelName 酒店名称
     * @param newPrice 新价格（需大于0）
     * @return 调整结果（true：成功；false：失败）
     */
    boolean adjustRoomPrice(String roomType, String hotelName, BigDecimal newPrice);

    /**
     * 补充房间库存（管理员操作）
     * @param roomType 房型
     * @param hotelName 酒店名称
     * @param addCount 补充的数量（需大于0）
     * @return 补充结果（true：成功；false：失败）
     */
    boolean addRoomStock(String roomType, String hotelName, int addCount);
}